package com.senlingspace.payment.lakala.bean.response;

import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.senlingspace.common.enums.LakalaTradeStateEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;

/**
 * 拉卡拉支付-交易查询接口响应
 *
 * @author lebronjames
 * @date 2024/07/24
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class TradeQueryResponse extends LakalaCommonResponse {

    @JsonProperty("resp_data")
    private RespData respData;

    @Data
    public static class RespData implements Serializable {

        /**
         * 拉卡拉分配的商户号（请求接口中商户号）
         */
        @JsonProperty("merchant_no")
        private String merchantNo;

        /**
         * 请求中的商户请求流水号
         */
        @JsonProperty("out_trade_no")
        private String outTradeNo;

        /**
         * 拉卡拉生成的交易流水
         */
        @JsonProperty("trade_no")
        private String tradeNo;

        /**
         * trade_no的后14位
         */
        @JsonProperty("log_no")
        private String logNo;

        /**
         * 交易大类
         *
         * @see com.senlingspace.payment.enums.LakalaTradeMainTypeEnum
         */
        @JsonProperty("trade_main_type")
        private String tradeMainType;

        /**
         * 拆单属性
         * 只有涉及合单交易时会出现：M-主单，S-子单
         */
        @JsonProperty("split_attr")
        private String splitAttr;

        /**
         * 账户端交易订单号
         * <p>
         * 账户端交易流水号
         */
        @JsonProperty("acc_trade_no")
        private String accTradeNo;

        /**
         * 钱包类型
         *
         * @see com.senlingspace.payment.enums.LakalaAccountTypeEnum
         */
        @JsonProperty("account_type")
        private String accountType;

        @JsonProperty("settle_merchant_no")
        private String settleMerchantNo;

        @JsonProperty("settle_term_no")
        private String settleTermNo;

        /**
         * 交易状态
         *
         * @see LakalaTradeStateEnum
         */
        @JsonProperty("trade_state")
        private String tradeState;

        /**
         * 交易状态描述
         * <p>
         * 长度：256
         */
        @JsonProperty("trade_state_desc")
        private String tradeStateDesc;

        /**
         * 订单金额
         * <p>
         * 单位：分
         */
        @JsonProperty("total_amount")
        private String totalAmount;

        /**
         * 付款人实付金额
         * <p>
         * 单位：分
         */
        @JsonProperty("payer_amount")
        private String payerAmount;

        @JsonProperty("buyer_refund_amount")
        private String buyerRefundAmount;

        /**
         * 账户端结算金额
         * <p>
         * 单位：分
         */
        @JsonProperty("acc_settle_amount")
        private String accSettleAmount;

        /**
         * 商户侧优惠金额（账户端）
         * <p>
         * 单位：分
         */
        @JsonProperty("acc_mdiscount_amount")
        private String accMdiscountAmount;

        /**
         * 账户端优惠金额
         * <p>
         * 单位：分
         */
        @JsonProperty("acc_discount_amount")
        private String accDiscountAmount;

        /**
         * 账户端其它优惠金额
         * <p>
         * 单位：分
         */
        @JsonProperty("acc_other_discount_amount")
        private String accOtherDiscountAmount;

        /**
         * 交易完成时间
         * <p>
         * 实际支付时间。yyyyMMddHHmmss
         */
        @JsonProperty("trade_time")
        private String tradeTime;

        /**
         * 用户标识1
         * <p>
         * 微信sub_open_id 支付宝buyer_logon_id（买家支付宝账号）
         */
        @JsonProperty("user_id1")
        private String userId1;

        /**
         * 微信openId支 付宝buyer_user_id 银联user_id
         */
        @JsonProperty("user_id2")
        private String userId2;

        /**
         * 付款银行
         */
        @JsonProperty("bank_type")
        private String bankType;

        /**
         * 银行卡类型
         *
         * @see com.senlingspace.payment.enums.LakalaCardTypeEnum
         */
        @JsonProperty("card_type")
        private String cardType;

        /**
         * 活动 ID
         */
        @JsonProperty("acc_activity_id")
        private String accActivityId;

        @JsonProperty("up_coupon_info")
        private String upCouponInfo;

        /**
         * 出资方信息
         * <p>
         * 数字货币中行返回示例说明：[{“fundchannel”:”BOC”,”amount”:”18”}]
         * 长度：512
         */
        @JsonProperty("trade_info")
        private String tradeInfo;

        /**
         * 账户端返回信息域
         */
        @JsonProperty("acc_resp_fields")
        private JSONObject accRespFields;

    }
}
